GoLang 中使用本地包的两种方法

您所在的位置:网站首页 golang 导入自己写的包 GoLang 中使用本地包的两种方法

GoLang 中使用本地包的两种方法

2024-06-11 19:40| 来源: 网络整理| 查看: 265

tags: Go categories: Go 写在前面

来总结一下 GoLang 中使用本地包的操作.

environment:

==> go version go version go1.20.4 darwin/arm64

go mod 是 go 1.11 (大约 2018 年 之后)开始支持的

本地包的导入可以分成两个情况, 即:

要导入的包存在于在本项目的目录下, 直接导入.要导入的包存在于其他目录下, 使用 replace 命令导入.

代码可以在这里找到: GoLang中使用本地包的操作;

在本项目目录下导入

这里以在 ./pkg0/main.go 中导入内部目录 ./pkg0/kpkg/ 中的 kpkg 模块为例, 首先需要填写内部模块(kpkg)的go.mod文件, 内容其实就是模块的名称:

// pkg0/kpkg/go.mod module kpkg go 1.20

然后就是要导入的模块(Hello)了:

// pkg0/kpkg/Hello.go package kpkg import "fmt" func SayHello() { fmt.Println("hello kkk") }

此时, 在./pkg0 目录下就可以使用内部目录中的模块 kpkg 了:

// pkg package main import ( "fmt" "kpkg" //use local pkg ) func main() { fmt.Println("hello pkg") kpkg.SayHello() // hello pkg // hello kkk }

其实就是要用go.mod文件暴露模块的位置, 一般来说模块都是存在于某特定目录中的.

在另一目录下导入

这种情况下稍微复杂一些, 我重新复制了一份代码, 就是目录中的 pkg1/ 目录, 内容与 pkg0/ 类似, 不过需要注意, pkg1/ 目录下多了一个 go.mod 文件, 其内容为:

module pkg1 go 1.20

这是为了其他目录可以检索到这个模块, 一会要导入 pkg1 下的 kpkg 模块中的 SayHello 方法.

然后重点来了, 就是 pkg2 模块, 在这里实现导入其他目录中的模块的方法.

首先需要为 pkg2 目录添加go.mod 文件:

module pkg2 go 1.20 require kpkg v0.0.0 replace kpkg => ../pkg1/kpkg

这里重点讲一下这个 go.mod 文件: 前面两行没什么问题, 主要是 require 语句以及 replace 语句, 这里看了一些文档才明白.

require 用于添加待导入的模块名与版本号, 由于是本地模块就直接默认版本v0.0.0 了, 这个格式是固定的, 数字加点, 不能变.

然后就是 replace, 用于指定导入包的路径, 其实 gomod 的主要作用是远程模块的导入, 所以一般用离线链接, 但是这里是本地, 就用相对路径来做.

然后就是 main 文件了:

package main import ( "fmt" "kpkg" ) func main() { fmt.Println("main-in pkg2") kpkg.SayHello() // main-in pkg2 // hello kkk } 总结 文件名不重要, 重要的是路径名, 也就是目录名, 模块导入时候都是依据这个来的, 这里建议不要用下划线, 而是用大小写区分目录名.在当前目录下导入模块比较简单, 写好 go.mod 文件即可, 在其他目录下导入模块要使用 require 和 replace 指定名称/版本和路径才行


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3